package com.leo.result;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * @author 030
 * @date 2020/9/3 9:37
 * @description 统一公共返回结果封装
 * @className Result
 */
@Data
public class Result {

	@ApiModelProperty(value = "是否成功")
	private Boolean success;

	@ApiModelProperty(value = "返回码")
	private Integer code;

	@ApiModelProperty(value = "返回消息")
	private String message;

	@ApiModelProperty(value = "返回数据")
	private Map<String, Object> data = new HashMap<>();

	/**
	 * 构造方法私有化，里面的方法都是静态方法，
	 * 达到保护属性的作用
	 */
	private Result(){

	}


	/**
	 * 这里是使用链式编程
	 */
	public static Result ok(){

		Result result = new Result();
		result.setSuccess(true);
		result.setCode(ResultCode.SUCCESS.getCode());
		result.setMessage(ResultCode.SUCCESS.getMessage());

		return result;
	}


	public static Result error(){

		Result result = new Result();
		result.setSuccess(false);
		result.setCode(ResultCode.ERROR.getCode());
		result.setMessage(ResultCode.ERROR.getMessage());

		return result;

	}


	/**
	 * 自定义返回成功与否
	 * @param success
	 * @return
	 */
	public Result success(Boolean success){

		this.success = success;
		return this;
	}


	public Result message(String message){

		this.message = message;
		return this;
	}

	public Result code(Integer code){

		this.code = code;
		return this;
	}


	public Result data(String key, Object value){

		this.data.put(key, value);
		return this;
	}


	public Result data(Map<String, Object> map){

		this.setData(map);
		return this;
	}

}
